home *** CD-ROM | disk | FTP | other *** search
/ Java Developer's Companion / Java Developer's Companion.iso / documentation / tutorial / native1.1 / implementing / example-1.1 / getInfo.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-07-13  |  2.8 KB  |  89 lines

  1. /*
  2.  * Copyright (c) 1995-1997 Sun Microsystems, Inc. All Rights Reserved.
  3.  *
  4.  * Permission to use, copy, modify, and distribute this software
  5.  * and its documentation for NON-COMMERCIAL purposes and without
  6.  * fee is hereby granted provided that this copyright notice
  7.  * appears in all copies. Please refer to the file "copyright.html"
  8.  * for further important copyright and licensing information.
  9.  *
  10.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  11.  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  12.  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  13.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
  14.  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  15.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  16.  */
  17. #include <stdio.h>
  18. #include <string.h>
  19. #include <stdlib.h>
  20. #include "MyTest.h"
  21.  
  22. jint Java_MyTest_getInfo(JNIEnv *env, jobject obj) {
  23.     int retvalue;
  24.     int i, j, num;
  25.     jint ret;
  26.     jclass myClass;
  27.     jmethodID methID;
  28.     jfieldID fld, fld2, fld3;
  29.     jvalue args[2];
  30.     jdouble retDbl;
  31.     jfloat retFlt;
  32.  
  33.     ret = 0;
  34.     i = 0;
  35.     retvalue = (*env)->GetVersion(env);
  36.     printf ("Version #: %d\n", retvalue);
  37.  
  38.     myClass = (*env)->GetObjectClass(env, obj);
  39.     if (myClass == 0) return 1;
  40.     
  41.     // get fieldID
  42.     fld = (*env)->GetFieldID(env, myClass, "myInt","I");
  43.     if ((*env)->ExceptionOccurred(env)) return 2;
  44.     fld2 = (*env)->GetFieldID(env, myClass, "myDbl", "D");
  45.     if ((*env)->ExceptionOccurred(env)) return 2;
  46.     fld3 = (*env)->GetFieldID(env, myClass, "myFlt", "F");
  47.     if ((*env)->ExceptionOccurred(env)) return 2;
  48.     // get field value
  49.     ret =  (*env)->GetIntField(env, obj, fld);
  50.     if ((*env)->ExceptionOccurred(env)) return 3;
  51.     retDbl =  (*env)->GetDoubleField(env, obj, fld2);
  52.     if ((*env)->ExceptionOccurred(env)) return 3;
  53.     retFlt =  (*env)->GetFloatField(env, obj, fld3);
  54.     if ((*env)->ExceptionOccurred(env)) return 3;
  55.  
  56.     methID = (*env)->GetMethodID(env, myClass, "displayHello", "()V");
  57.     if (methID==0) return 4;
  58.  
  59.     // call displayHello
  60.     (*env)->CallVoidMethod(env, obj, methID);
  61.  
  62.     // do some processing with myInt
  63.     methID = (*env)->GetMethodID(env, myClass, "doCalc","(II)I");
  64.     if (methID==0) return 5;
  65.     // call doCalc Java routine
  66.     num = 2;
  67.     ret = (*env)->CallIntMethod(env, obj, methID, ret, num);
  68.  
  69.     // call doCalc return using callmethoda
  70.     args[0].i = ret;
  71.     args[1].i = num;
  72.     ret = (*env)->CallIntMethodA(env, obj, methID, &args[0]);
  73.  
  74.     // call c function for further calculations
  75.     ret = myCalc(ret, num);
  76.  
  77.     // set a new value in myInt
  78.     (*env)->SetIntField(env, obj, fld, ret);
  79.     if ((*env)->ExceptionOccurred(env)) return 6;
  80.     retDbl = 5.689e9;
  81.     (*env)->SetDoubleField(env, obj, fld2, retDbl);
  82.     if ((*env)->ExceptionOccurred(env)) return 6;
  83.  
  84.     retFlt = 1.123;
  85.     (*env)->SetFloatField(env, obj, fld3, retFlt);
  86.     if ((*env)->ExceptionOccurred(env)) return 6;
  87.     return(i);
  88. }
  89.